package Ubicacion;

import java.util.Random;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

public class Punto {
	
	private int x;
	private int y;
	
	public Punto(int x, int y){
		
		this.x=x;
		this.y=y;
	}

	public int distancia(Punto punto){
		
		int deltaX=this.x-punto.x;
		int deltaY=this.y-punto.y;
		
		float distancia=(float)Math.sqrt(deltaX*deltaX+deltaY*deltaY);
		int distanciaRedondeada=Math.round(distancia);
		return distanciaRedondeada;
	}
		
	public int getX(){
		return this.x;
	}
	
	public int getY(){		
		return this.y;
	}

	public boolean limites(int i, int j) {
		if(this.x<=i && this.y<=j){
			return true;
		}
		return false;
	}
	
	public boolean equals (Object otroPunto){
		if (otroPunto==null) return false;
		if (!(otroPunto instanceof Punto)) return false;
	return ( (((Punto) otroPunto).getX()==this.getX()) && ( (Punto) otroPunto).getY()==this.getY()) ;
	}
	
	public int hashCode(){
		return (x+y);
	}
	
	public Punto este() {
		return new Punto (x+1,y);
	}
	
	public Punto oeste() {
		return new Punto (x-1,y);
	}
	
	public Punto norte() {
		return new Punto (x,y-1);
	}
	
	public Punto sur() {
		return new Punto (x,y+1);
	}
	
	public Punto noreste() {
		return new Punto (x+1,y-1);
	}
	
	public Punto noroeste() {
		return new Punto (x-1,y-1);
	}
	
	public Punto sureste() {
		return new Punto (x+1,y+1);
	}
	
	public Punto suroeste() {
		return new Punto (x-1,y+1);
	}

	public static Punto puntoAlAzar() {
		Random gen = new Random();
		int x = gen.nextInt(20);
		int y = gen.nextInt(20);
		return new Punto(x,y);
	}
	
	public String toString(){
		String nuevoString;
		Integer x1 = this.getX();
		Integer y1 = this.getY();
		nuevoString= "("+ x1.toString()+","+y1.toString()+")";
		return nuevoString;
	}

	public Element serializar(Document doc) {
		Element elePunto=doc.createElement("Punto");
		elePunto.setAttribute("x", Integer.toString(x));
		elePunto.setAttribute("y",Integer.toString(y));
		return elePunto;
	}

	public static Punto hidratar(Node punto) {
		int x=Integer.parseInt(((Element) punto).getAttribute("x"));
		int y=Integer.parseInt(((Element) punto).getAttribute("y"));
		return new Punto(x,y);
	}
	
	

}
